﻿Public Class TMyStatus
    Implements System.IDisposable
    Private _Query As New TMyQuery

    Public Sub New(ByVal AConnection As TMySession)
        _Query.Session = AConnection
    End Sub

    Public Sub FlushStatus()
        _Query.Clear()
        _Query.SQL.Append("flush status")
        _Query.Execute()
    End Sub

    Public ReadOnly Property SelectStatus() As DataTable
        Get
            Return Me.Status("Select")
        End Get
    End Property
    Public ReadOnly Property HandlerStatus() As DataTable
        Get
            Return Me.Status("Handler")
        End Get
    End Property
    Public ReadOnly Property SortStatus() As DataTable
        Get
            Return Me.Status("Sort")
        End Get
    End Property
    Public ReadOnly Property CreatedStatus() As DataTable
        Get
            Return Me.Status("Created")
        End Get
    End Property

    Private ReadOnly Property Status(ByVal AType As String) As DataTable
        Get
            _Query.Clear()
            _Query.SQL.Append("show session status like '").Append(AType).Append("%'")
            _Query.Execute()
            Try
                Return _Query.DataSet.Tables(0).Copy
            Finally
                _Query.Close()
            End Try
        End Get
    End Property
    Private disposedValue As Boolean = False        ' 重複する呼び出しを検出するには

    ' IDisposable
    Protected Overridable Sub Dispose(ByVal disposing As Boolean)
        If Not Me.disposedValue Then
            If disposing Then
                ' TODO: 他の状態を解放します (マネージ オブジェクト)。
            End If
            _Query.Close()
            _Query.Dispose()
            ' TODO: ユーザー独自の状態を解放します (アンマネージ オブジェクト)。
            ' TODO: 大きなフィールドを null に設定します。
        End If
        Me.disposedValue = True
    End Sub

#Region " IDisposable Support "
    ' このコードは、破棄可能なパターンを正しく実装できるように Visual Basic によって追加されました。
    Public Sub Dispose() Implements IDisposable.Dispose
        ' このコードを変更しないでください。クリーンアップ コードを上の Dispose(ByVal disposing As Boolean) に記述します。
        Dispose(True)
        GC.SuppressFinalize(Me)
    End Sub
#End Region

End Class
